package com.xzz.listnode;

/**
 * @author: hhz
 * @create: 2021-12-31 13:48
 * 2. 两数相加
 * 你两个非空 的链表，表示两个非负的整数。它们每位数字都是按照逆序的方式存储的，并且每个节点只能存储一位数字。
 * <p>
 * 请你将两个数相加，并以相同形式返回一个表示和的链表。
 * <p>
 * 你可以假设除了数字 0 之外，这两个数都不会以 0开头。
 **/
public class AddTwoNumbers {
    public static void main(String[] args) {
        ListNode l1 = new ListNode(9, new ListNode(9, new ListNode(9, new ListNode(9, new ListNode(9, new ListNode(9, new ListNode(9)))))));
        ListNode l2 = new ListNode(9, new ListNode(9, new ListNode(9, new ListNode(9))));
        ListNode node = addTwoNumbers(l1, l2);
        System.out.println();
    }

    public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode head = new ListNode(0);
        ListNode temp = head;
        ListNode left = l1;
        ListNode right = l2;
        int i = 0;
        while (left != null || right != null || i > 0) {
            int newVal = i;
            if(left!=null){
                newVal+=left.val;
                left = left.next;
            }
            if(right!=null){
                newVal+=right.val;
                right = right.next;
            }
            i = newVal/10;
            newVal = newVal%10;

            temp.next = new ListNode(newVal);

            temp = temp.next;
        }
//        while (left != null) {
//            int newVal = left.val + i;
//            if (newVal < 10) {
//                temp.next = new ListNode(newVal);
//                i = 0;
//            } else {
//                temp.next = new ListNode(newVal % 10);
//                i = newVal / 10;
//            }
//            temp = temp.next;
//            left = left.next;
//        }
//        while (right != null) {
//            int newVal = right.val + i;
//            if (newVal < 10) {
//                temp.next = new ListNode(newVal);
//                i = 0;
//            } else {
//                temp.next = new ListNode(newVal % 10);
//                i = newVal / 10;
//            }
//            temp = temp.next;
//            right = right.next;
//        }
//        if (i > 0) {
//            temp.next = new ListNode(i);
//        }
        return head.next;
    }
}
